package IMIC.NGUYENVANDOAN.XML_DEMO;

import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.filechooser.FileNameExtensionFilter;

import vn.edu.imic.XmlProcess.XMLManagements;

public class MODULE01_B042 extends JFrame {

    private final JPanel contentPane;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    MODULE01_B042 frame = new MODULE01_B042();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public MODULE01_B042() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 498, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JButton button = new JButton("TẠO & GHI DỮ LIỆU RA FILES XML");
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 1. Khai báo & khởi tạo 02 kiểu ghi dữ liệu
                Object[] options = { "Ghi mới dữ liệu", "Ghi nối tiếp dữ liệu", "Hủy bỏ" };
                boolean isWriter = false;
                int n = JOptionPane.showOptionDialog(getParent(), "Hãy chọn kiểu ghi dữ liệu mà bạn muốn: ", "Chọn",
                        JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, null);
                if (n == 0)
                    isWriter = true;
                else
                    isWriter = false;

                // 2. Khai báo danh sách các Field cần cho việc khởi tạo file
                // XML
                List<Object> lisField = new ArrayList<Object>();
                lisField.add("RollNo");
                lisField.add("FullName");

                // 3. Khái báo danh sách sử dụng
                List<List<Object>> lisValue = new ArrayList<List<Object>>();
                // a. Khởi tạo đối tượng Sinh Viên
                List<Object> lis = new ArrayList<Object>();

                // b. Khởi tạo thông tin cho đối tượng Sinh Viên
                lis.add(100);
                lis.add("Hoàng Văn E");

                // c. Đưa List<Object> vào List<List<Object>>
                lisValue.add(lis);

                // 4. Hiện cửa sổ để lưu files XML
                JFileChooser objFile = new JFileChooser();
                objFile.setCurrentDirectory(new java.io.File("."));
                objFile.setDialogTitle("Chọn file: ");
                objFile.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
                // 1. Định nghĩa danh sách các kiểu files mà chúng ta muốn làm
                // việc
                String[] EXTENSION = new String[] { "xml" };

                // 2. Thiết lập chế độ lọc files căn cứ vào danh sách nêu trên
                FileNameExtensionFilter filter = new FileNameExtensionFilter("XML files", EXTENSION);

                objFile.setFileFilter(filter);
                objFile.setMultiSelectionEnabled(false);

                // 3. Lựa chọn kiểu cửa sổ làm việc:
                /*
                 * + showOpenDialog(): Mở files ... + showSaveDialog(): Lưu
                 * files ...
                 */
                int returnVal = objFile.showSaveDialog(getParent());
                String ParentPath = "";
                String FileName = "";
                if (returnVal == JFileChooser.APPROVE_OPTION) {
                    ParentPath = objFile.getSelectedFile().getParent();
                    FileName = objFile.getSelectedFile().getName();

                    String pathFull = ParentPath + "/" + FileName;

                    // 5. Khai báo sử dụng files thư viện
                    XMLManagements objXML = new XMLManagements();
                    try {
                        objXML.WriteDataXML(lisField, lisValue, "iMIC", "Student", pathFull, isWriter);

                        JOptionPane.showMessageDialog(getParent(), "Okie :D");
                    } catch (Exception e1) {
                        System.out.println(e1.getMessage());
                    }
                }
            }
        });
        button.setFont(new Font("Cambria", Font.PLAIN, 27));
        button.setBounds(10, 30, 446, 108);
        contentPane.add(button);
    }

}
